function TrFilterView(controller, div, filter) {

	var self = this;
	this.applyImmidiately = false;
	var grid = new Grid(div, { width: '310px', classes: ['grid', 'bordered'], collapsable: true })
		.setHeader('ФИЛЬТР ТРАНЗАКЦИЙ')
		.addRow(new GridRow().addCell('<input id="' + div + 'ApplyBtn" type="button" value="⟳ Обновить" />')
			.addCell('<div id="' + div + 'ApplyImmidiately">применять немедленно</div>'))
		.addRow(new GridRow({ classes: ['vsection']}).addCell('<div id="' + div + 'Incomes" class="income">Доходы</div>')
			.addCell('<div id="' + div + 'Outcomes" class="outcome">Расходы</div>')
			.addCell('<div id="' + div + 'Transfers" class="transfer">Переносы</div>')
			.addCell('<div id="' + div + 'TypesHelp" class="help-tooltip-btn tooltip">?</div>'))
		.addRow(new GridRow({ classes: ['vsection']}).addCell('с')
			.addCell('<div id="' + div + 'DateFrom">')
			.addCell('по')
			.addCell('<div id="' + div + 'DateTo">'))
		.addRow(new GridRow({ classes: ['vsection']}).addCell('<div id="' + div + 'Accounts">Acc</div>'))
		.addRow(new GridRow({ classes: ['vsection']}).addCell('<div id="' + div + 'Categories"></div>'))
		.addRow(new GridRow({ classes: ['vsection']}).addCell('<div id="' + div + 'Tags"></div>'))
		.render();

	createSimpleButton(div + 'ApplyBtn', 90, 25, function() {
		controller.loadTransactions();
	});
	el(div + 'ApplyImmidiately').jqxCheckBox({ checked: this.applyImmidiately }).change(function(event) {
		self.applyImmidiately = event.args.checked;
	});

	createCheckBox(div + 'Incomes', filter.incomesFilter.value, function(show) {
		filter.incomesFilter.set(show);
	});
	createCheckBox(div + 'Outcomes', filter.outcomesFilter.value, function(show) {
		filter.outcomesFilter.set(show);
	});
	createCheckBox(div + 'Transfers', filter.transfersFilter.value, function(show) {
		filter.transfersFilter.set(show);
	});
	createTooltip(div + 'TypesHelp', '<b>Доход</b> - все, что поступает на собственные счета извне, включая контрагентов<br /><br />' +
				'<b>Расход</b> - все, что расходуется с собственных счетов, включая переводы контрагентам<br /><br />' +
				'<b>Перенос</b> - перемещения между собственными счетами в одной валюте');

	createDatePicker(div + 'DateFrom', filter.dateFrom.date, { onChangeFn: function(date) {
		filter.dateFrom.setDate(date);
	} });
	createDatePicker(div + 'DateTo', filter.dateTo.date, { onChangeFn: function(date) {
		filter.dateTo.setDate(date);
	} });

	$.subscribeOne('accounts-loaded', function(event, data) {
		new AccountsFilterView(div + 'Accounts', filter.accountsFilter, data.items);
	});

	$.subscribeOne('categories-loaded', function(event, data) {
		new CategoriesFilterView(div + 'Categories', filter.categoriesFilter, data.items);
	});

	$.subscribeOne('tags-loaded', function(event, data) {
		new TagsFilterView(div + 'Tags', filter.tagsFilter, data.items);
	});

	$(filter).on('change', function(event) {
		if(self.applyImmidiately) {
			controller.loadTransactions();
		}
	});
};